package com.siqi.hr.system.organization.dao.intf;

import com.siqi.hr.system.common.model.Module;
import com.siqi.hr.system.custom.entity.EntityRecord;
import com.siqi.hr.system.organization.entity.Role;
import com.siqi.hr.system.organization.entity.RoleEntityScope;

import java.util.List;
import java.util.Map;

/**
 * 角色信息维护dao接口层
 * @author     xiaogq
 * Created by xiaogoingqin on 2016/7/21.
 */
public interface RoleDao {

    /**
     * 根据当前登录系统员工所属角色Id获得可以登录的模块
     * @author                 xiaogq
     * @param roleId （角色id）
     * @return
     */
    public List<Module> getRoleModule(String roleId) throws Exception;

    /**
     * 查询该角色针对实体字段级权限
     * @author                 xiaogq
     * @param roleId（角色id）
     * @param entityId（实体id）
     * @return
     */
    public Map<String, Boolean> getRoleEntityFieldListAuth(String roleId, int entityId) throws Exception;

    /**
     * 根据角色Id、实体id获取数据权限标识
     * @author                 xiaogq
     * @param roleId          角色Id
     * @param entityRecord   实体对象信息
     * @return
     */
    public RoleEntityScope queryRoleDataScope(String roleId, EntityRecord entityRecord);

    /**
     * 获取所有管理员角色
     * @author                 xiaogq
     * @return
     */
    public abstract List<Role> getAllAdminRoles();

    /**
     * 添加角色、实体与操作之间的关系
     * @author                 xiaogq
     * @param roleList        角色List集合
     * @param entityRecord   实体对象信息
     * @return
     */
    public void setRoleEntityOperation(List<Role> roleList, EntityRecord entityRecord);

    /**
     * 添加实体时设置实体数据权限
     * @author                 xiaogq
     * @param roleList        角色List集合
     * @param entityRecord   实体对象信息
     * @return
     */
    public void setDefaultRoleEntityScope(List<Role> roleList, EntityRecord entityRecord);

    /**
     * 获取所有角色方法
     * @author                 xiaogq
     * @return
     */
    public List<Role> queryRoleAll();

    /**
     * 根据角色id查询系统菜单、业务菜单方法
     * @author    xiaogq
     * @param roleid     角色id
     * @param kind        系统菜单还是业务菜单(sys:系统菜单，bus:业务菜单)
     * @return
     */
    public String queryRoleMenus(String roleid, String kind);

    /**
     * 角色系统配置权限、crm权限保存
     * @author    xiaogq
     * @param roleid      角色id
     * @param kind        系统配置权限还是crm权限标识
     * @param menuids     可以登录的模块
     */
    public int updateRolePms(String roleid, String kind, String menuids);

    /**
     * 根据角色id获取操作权限列表受权限控制实体信息
     * @author    xiaogq
     * @param roleid      角色id
     */
    public List<Map<String, Object>> queryRoleOperationPms(String roleid);

    /**
     * 保存系统操作权限配置信息方法
     * @author             xiaogq
     * @param roleid      角色id
     * @param reoList     角色对应实体操作权限数据范围
     */
    public int updateRoleOperationPms(String roleid, List<Map<String, Object>> reoList);

    /**
     * 根据角色id获取数据权限列表受权限控制实体信息
     * @author    xiaogq
     * @param roleid      角色id
     */
    public List<RoleEntityScope> queryRoleDataPms(String roleid);

    /**
     * 获取数据权限所有枚举值(全部，本部门及下级部门，本部门，相关部门，自己，无)
     * @author    xiaogq
     * @return
     */
    public List<Map<String, Object>> queryAllDataScope();

    /**
     * 保存系统数据权限配置信息方法
     * @author             xiaogq
     * @param roleid      角色id
     * @param redList     角色对应实体权数据限数据范围
     * @throws Exception
     */
    public int updateRoleDataPms(String roleid, List<Map<String, Object>> redList);

}
